package initialize

import (
	"server/config"
	"server/a0"

	"gorm.io/gorm"
)

const sys = "system"

// 这段代码的核心流程是：
// 读取配置中的所有数据库信息 → 跳过禁用的数据库 → 按类型初始化连接 → 用别名存储到 map → 绑定 "system" 别名的连接作为主数据库 → 全局存储所有连接

// 其目的是支持多数据库连接管理，让应用可以同时连接多个不同类型的数据库（如 MySQL、PostgreSQL），并通过别名快速访问，同时保留一个 "主数据库" 供核心业务使用。
func DBList() {
	dbMap := make(map[string]*gorm.DB)
	for _, info := range a0.A_CONFIG.DBList {
		if info.Disable {
			continue
		}
		switch info.Type {
		case "mysql":
			dbMap[info.AliasName] = GormMysqlByConfig(config.Mysql{GeneralDB: info.GeneralDB})
		case "mssql":
			dbMap[info.AliasName] = GormMssqlByConfig(config.Mssql{GeneralDB: info.GeneralDB})
		case "pgsql":
			dbMap[info.AliasName] = GormPgSqlByConfig(config.Pgsql{GeneralDB: info.GeneralDB})
		case "oracle":
			dbMap[info.AliasName] = GormOracleByConfig(config.Oracle{GeneralDB: info.GeneralDB})
		default:
			continue
		}
	}
	// 做特殊判断,是否有迁移
	// 适配低版本迁移多数据库版本
	if sysDB, ok := dbMap[sys]; ok {
		a0.A_DB = sysDB
	}
	a0.A_DBList = dbMap
}
